x86 ept: ignore guest writes to read only memory regions or memory
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 23 Oct 2009 09:13:52 +0000 (10:13 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 23 Oct 2009 09:13:52 +0000 (10:13 +0100)
holes in EPT.

This patch prevents domain crash when running memtest86 with EPT.

Signed-off-by: Xin Li <xin.li@intel.com>
xen/arch/x86/hvm/vmx/vmx.c

index e187677dd39df0460f4955a53b0320d3509817de..d85b3d877b92530220016bb9a6b96e5990f61397 100644 (file)
@@ -2184,6 +2184,17 @@ static void ept_handle_violation(unsigned long qualification, paddr_t gpa)
         return;
     }
 
+    /* Ignore writes to:
+     *     1. read only memory regions;
+     *     2. memory holes. */
+    if ( (qualification & EPT_WRITE_VIOLATION)
+         && (((gla_validity == EPT_GLA_VALIDITY_MATCH) && (t == p2m_ram_ro))
+             || (mfn_x(mfn) == INVALID_MFN)) ) {
+        int inst_len = __get_instruction_length();
+        __update_guest_eip(inst_len);
+        return;
+    }
+
     /* Everything else is an error. */
     gla = __vmread(GUEST_LINEAR_ADDRESS);
     gdprintk(XENLOG_ERR, "EPT violation %#lx (%c%c%c/%c%c%c), "